'-> SamplesMaster by Stefano Maria Regattin  
'i> 7 luglio 1996
'm> 8,9,11,13,15,16,21,22,23,25,27,28,30 luglio 1996 
'm> 1,2,4,7,8,10,12,13,14,16,17,20,21,28,29 agosto 1996
'm> 4,12,13,17 ottobre 1996
'm> 1,11,13,14 novembre 1996 
'm> 20 febbraio 1997 
'm> 8 marzo 1997 
'm> 17 giugno 1997 
'm> 10 novembre 1997 
'm> 31 marzo 1998
'm> 3,4,5,8,9,11,20,25,26,27,29 aprile 1998
'm> 5,7,8,9,19,23 luglio 1998
'm> 11 agosto 1998 
'm> 24 aprile 1999 
'm> 22,31 luglio 1999
'm> 28 novembre 1999 
'm> 4 dicembre 1999
'm> 20,21 maggio 2000
'm> 13 dicembre 2000 
'm> 17,20,21 gennaio 2001
'm> 26,27 febbraio 2001
'm> 12 agosto 2002 
'------------------  
Set Buffer 40
BANCO=65535
BANCODIIO=65534
BANCO3=65533
BANCO4=65532
Global ANNOTAZIONI$,FILE$,NOMEFILE$,ZONAATTIVA$
Global ALTEZZA,ANOMALOIFF,BANCO,BANCODIIO,BANCO3,BANCO4,CICLO,FILTRO
Global FINECAMPIONE,FREQUENZA,GENERACAMPIONE,INIZIO,INIZIOCAMPIONE
Global LUNGHEZZACAMPIONE,NUOVAFINECAMPIONE,NUOVAFREQUENZA,NUOVOINIZIOCAMPIONE
Global PASSO,POSIZIONEINGRANDIMENTO,POSIZIONESLIDER,RIDUZIONE,SENZAMEMORIA
Global ULTIMALINEA,XLINEAFINECAMPIONE,XLINEAINIZIOCAMPIONE
Global YSLIDERINGRANDIMENTO,ZERO
Global DIVISIONESLIDERINGRANDIMENTO#
Dim F0RMADONDA(8191)
Global F0RMADONDA()
Proc SETTASCHERMO
Proc ARCOBALENO
Reserve As Chip Work BANCO,512
FILTRO=True
FREQUENZA=8363
Proc CONDIZIONEINIZIALE
Repeat 
 Repeat 
  TASTODELTOPOPREMUTO=Mouse Key
  ZONATOPO=Mouse Zone
  If TASTODELTOPOPREMUTO=1
   If DENTROZONA=False
    If ZONATOPO=1
     'Suona il campione 
     Inverse On : Print At(0,ULTIMALINEA-3);"Suona"
     Proc SUONA
    End If 
    If ZONATOPO=2
     'Ferma la riproduzione del campione  
     Inverse On : Print At(0,ULTIMALINEA-2);"Ferma"
     Sam Stop 
    End If 
    If ZONATOPO=3
     'Attiva o disattiva la riproduzione all'infinito del campione  
     CICLO= Not CICLO : Proc CICLO
    End If 
    If ZONATOPO=4
     'Attiva o disattiva il filtro audio  
     FILTRO= Not FILTRO : Proc FILTRO
    End If 
    If ZONATOPO=5
     'Mostra tutto il campione  
     Inverse On : Print At(19,ULTIMALINEA-2);"Tutto"
     NUOVOINIZIOCAMPIONE=Start(BANCO)
     NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
     LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
     LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
     Proc MOSTRACAMPIONE
     INIZIO=True : Proc INIZIO
     POSIZIONESLIDER=0
     Proc SLIDERINGRANDIMENTO
     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
    End If 
    If ZONATOPO=6
     'Mostra una porzione del campione compresa tra tra le due linee verdi  
     Inverse On : Print At(26,ULTIMALINEA-2);"Tra le linee"
     Proc MOSTRACAMPIONE
     INIZIO=True : Proc INIZIO
     POSIZIONESLIDER=0
     Proc SLIDERINGRANDIMENTO
     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
    End If 
    If ZONATOPO=7
     'Mostra l'inizio del campione ed attiva la linea verde marcatrice d'inizio 
     ' come marcatore corrente  
     INIZIO=True : Proc INIZIO
     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
     Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
    End If 
    If ZONATOPO=8
     'Mostra la fine del campione ed attiva la linea verde marcatrice della fine
     ' come marcatore corrente
     INIZIO=False : Proc INIZIO
     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
     Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
    End If 
    If ZONATOPO=9
     'Cerca lo zero all'indietro nel campione a partire dalla linea verde 
     ' marcatrice corrente  
     Inverse On : Print At(51,ULTIMALINEA-2);"<Indietro"
     If INIZIO=True
      Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,False] : NUOVOINIZIOCAMPIONE=Param
      LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
      NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
     Else 
      Proc CERCALOZERO[NUOVAFINECAMPIONE,False] : NUOVAFINECAMPIONE=Param
      LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
      NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
     End If 
     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
     Proc SLIDERINGRANDIMENTO
     Proc AGGIUSTACAMPIONE : Proc LINEE : Proc INGRANDISCI
    End If 
    If ZONATOPO=10
     'Cerca lo zero avanti nel campione a partire dalla linea verde marcatrice
     ' corrente 
     Inverse On : Print At(61,ULTIMALINEA-2);"Avanti>"
     If INIZIO=True
      Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,True] : NUOVOINIZIOCAMPIONE=Param
      LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
      NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
     Else 
      Proc CERCALOZERO[NUOVAFINECAMPIONE,True] : NUOVAFINECAMPIONE=Param
      LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
      NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
     End If 
     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
     Proc SLIDERINGRANDIMENTO
     Proc AGGIUSTACAMPIONE : Proc LINEE : Proc INGRANDISCI
    End If 
    If ZONATOPO=11
     'Carica un campione
     Inverse On : Print At(69,ULTIMALINEA-3);"Carica" : Inverse Off 
     Proc FERMACAMPIONEEDANNULLACICLOCAMPIONE
     Proc CARICAUNFILE
     Exit If SENZAMEMORIA=True,2
     If Exist(FILE$)
      Proc CARICARAWOIFF
      Proc CONDIZIONEINIZIALE
     End If 
    End If 
    If ZONATOPO=12
     'Attiva la zona di ingrandimento o,se questa era già attiva, sposta la linea 
     ' verde marcatrice corrente nella posizione indicata dal puntatore del mouse 
     If ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
      Proc TIC[Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento di un Byte",ULTIMALINEA]
      If INIZIO=True
       NUOVOINIZIOCAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
       NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
      Else 
       NUOVAFINECAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
       NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
      End If 
      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
      Proc SLIDERINGRANDIMENTO
      Proc AGGIUSTACAMPIONE : Proc LINEE : Proc INGRANDISCI
     Else 
      ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
      Proc MOSTRALAZONAATTIVA
     End If 
     NUOVOMESSAGGIO=True
    End If 
    If ZONATOPO=13
     'Attiva la zona del campione o, se questa era già attiva, sposta la linea
     ' verde marcatrice corrente nella posizione indicata dal puntatore del mouse 
     If ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
      If INIZIO=True
       NUOVOINIZIOCAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
       NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
       POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
      Else 
       NUOVAFINECAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
       NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
       POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-320
      End If 
      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
      Proc SLIDERINGRANDIMENTO
      Proc AGGIUSTACAMPIONE : Proc LINEE : Proc INGRANDISCI
     Else 
      ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
      Proc MOSTRALAZONAATTIVA
     End If 
    End If 
    If ZONATOPO=14
     'Genera un nuovo campione
     Inverse On : Print At(6,ULTIMALINEA-2);"Genera" : Inverse Off 
     Proc GENERACAMPIONE
     GENERACAMPIONE=False
     Proc CONDIZIONEINIZIALE
    End If 
    If ZONATOPO=15
     'Salva il campione come RAW od IFF 
     Inverse On : Print At(69,ULTIMALINEA-2);"Salva"
     Proc FERMACAMPIONEEDANNULLACICLOCAMPIONE
     Proc SALVAUNFILE
     Proc MESSAGGI
    End If 
    If ZONATOPO=16
     'Esce dal programma
     Exit 2
    End If 
    If ZONATOPO=18
     'Reimposta la frequenza di riproduzione originale del campione 
     Inverse On 
     Print At(0,ULTIMALINEA-5);"Frequenza"
     Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
     NUOVAFREQUENZA=FREQUENZA
     Proc FREQUENZA
     NUOVOMESSAGGIO=True
    End If 
    If ZONATOPO=19
     'Porta la frequenza di riproduzione del campione avanti  
     Inverse On 
     Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
     Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
     Inc NUOVAFREQUENZA
     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
     Proc FREQUENZA
     NUOVOMESSAGGIO=True
    End If 
    If ZONATOPO=20
     'Porta la frequenza di riproduzione del campione indietro
     Inverse On 
     Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
     Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
     Dec NUOVAFREQUENZA
     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
     Proc FREQUENZA
     NUOVOMESSAGGIO=True
    End If 
    If ZONATOPO=21
     'Miscela due campioni con dissolvenza tra l'uno e l'altro
     Inverse On : Print At(26,ULTIMALINEA-5);"MixTimbri" : Inverse Off 
     Proc MISCELATIMBRI
     GENERACAMPIONE=False
     Proc CONDIZIONEINIZIALE
    End If 
    If ZONATOPO=22
     'Posiziona al volo le linee marcatrici verdi 
     Inverse On : Print At(36,ULTIMALINEA-5);"MarcaAlVolo" : Inverse Off 
     Proc FERMACAMPIONEEDANNULLACICLOCAMPIONE
     Proc MARCAALVOLO
     Proc AGGIUSTACAMPIONE
     Proc SLIDERINGRANDIMENTO
     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
     NUOVOMESSAGGIO=True
    End If 
    DENTROZONA=True
   End If 
   If ZONATOPO=17
    'Attiva lo slider che permette di scegliere l'area ingrandita del campione 
    ' da vedere
    POSIZIONESLIDER=X Screen(X Mouse)/DIVISIONESLIDERINGRANDIMENTO#
    Proc SLIDERINGRANDIMENTO
    POSIZIONEINGRANDIMENTO=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO-319
    Proc INGRANDISCI
   End If 
  Else If TASTODELTOPOPREMUTO=2
   If ZONATOPO=19
    'Porta la frequenza di riproduzione del campione avanti velocemente
    Inverse On 
    Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
    Proc TIC["Tasto destro del mouse>incremento veloce",ULTIMALINEA]
    Inc NUOVAFREQUENZA
    Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
    Proc FREQUENZA
    NUOVOMESSAGGIO=True
   End If 
   If ZONATOPO=20
    'Porta la frequenza di riproduzione del campioneindietro velocemente 
    Inverse On 
    Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
    Proc TIC["Tasto destro del mouse>decremento veloce",ULTIMALINEA]
    Dec NUOVAFREQUENZA
    Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
    Proc FREQUENZA
    NUOVOMESSAGGIO=True
   End If 
  Else 
   Inverse Off 
   Print At(0,ULTIMALINEA-3);"Suona"
   Print At(0,ULTIMALINEA-2);"Ferma"
   Print At(19,ULTIMALINEA-2);"Tutto"
   Print At(26,ULTIMALINEA-2);"Tra le linee"
   Print At(51,ULTIMALINEA-2);"<Indietro"
   Print At(61,ULTIMALINEA-2);"Avanti>"
   Print At(69,ULTIMALINEA-3);"Carica"
   Print At(69,ULTIMALINEA-2);"Salva"
   Print At(0,ULTIMALINEA-5);"Frequenza";Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
   Print At(26,ULTIMALINEA-5);"MixTimbri"
   Print At(36,ULTIMALINEA-5);"MarcaAlVolo"
   If NUOVOMESSAGGIO=True
    Proc MESSAGGI
    NUOVOMESSAGGIO=False
   End If 
   DENTROZONA=False
  End If 
  TASTOPREMUTO$=Inkey$
 Until TASTOPREMUTO$<>""
 If ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  If INIZIO=True
   If TASTOPREMUTO$=Cright$
    Add NUOVOINIZIOCAMPIONE,PASSO
    LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
    NUOVOINIZIOCAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
    POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
    Proc SLIDERINGRANDIMENTO
    POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
   End If 
   If TASTOPREMUTO$=Cleft$
    Add NUOVOINIZIOCAMPIONE,-PASSO
    LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
    NUOVOINIZIOCAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
    POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
    Proc SLIDERINGRANDIMENTO
    POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
   End If 
  Else 
   If TASTOPREMUTO$=Cright$
    Add NUOVAFINECAMPIONE,PASSO
    LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
    NUOVAFINECAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
    POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
    Proc SLIDERINGRANDIMENTO
    POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
   End If 
   If TASTOPREMUTO$=Cleft$
    Add NUOVAFINECAMPIONE,-PASSO
    LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
    NUOVAFINECAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
    POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
    Proc SLIDERINGRANDIMENTO
    POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
   End If 
  End If 
 Else 
  If INIZIO=True
   If TASTOPREMUTO$=Cright$
    If TASTODELTOPOPREMUTO=0
     Add NUOVOINIZIOCAMPIONE,320
    Else 
     Inc NUOVOINIZIOCAMPIONE
    End If 
    LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
    NUOVOINIZIOCAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
    POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
    Proc SLIDERINGRANDIMENTO
    POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
   End If 
   If TASTOPREMUTO$=Cleft$
    If TASTODELTOPOPREMUTO=0
     Add NUOVOINIZIOCAMPIONE,-320
    Else 
     Dec NUOVOINIZIOCAMPIONE
    End If 
    LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
    NUOVOINIZIOCAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
    POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
    Proc SLIDERINGRANDIMENTO
    POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
   End If 
  Else 
   If TASTOPREMUTO$=Cright$
    If TASTODELTOPOPREMUTO=0
     Add NUOVAFINECAMPIONE,320
    Else 
     Inc NUOVAFINECAMPIONE
    End If 
    LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
    NUOVAFINECAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
    POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
    Proc SLIDERINGRANDIMENTO
    POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
   End If 
   If TASTOPREMUTO$=Cleft$
    If TASTODELTOPOPREMUTO=0
     Add NUOVAFINECAMPIONE,-320
    Else 
     Dec NUOVAFINECAMPIONE
    End If 
    LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
    NUOVAFINECAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
    POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
    Proc SLIDERINGRANDIMENTO
    POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
   End If 
  End If 
 End If 
 If TASTOPREMUTO$=Cup$
  ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  Proc MOSTRALAZONAATTIVA
 End If 
 If TASTOPREMUTO$=Cdown$
  ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  Proc MOSTRALAZONAATTIVA
 End If 
 If TASTOPREMUTO$=" "
  Inverse On : Print At(0,ULTIMALINEA-3);"Suona"
  Proc SUONA
 End If 
 If TASTOPREMUTO$="c"
 End If 
 If TASTOPREMUTO$="s"
 End If 
Until TASTOPREMUTO$=Chr$(27)
Inverse On : Print At(76,ULTIMALINEA-2);"Esci" : Wait 50
Erase BANCO : Reserve Zone : Rainbow Del 0 : Screen Close 0 : End 
Procedure AGGIUSTACAMPIONE
 NUOVOINIZIOCAMPIONE=Min(NUOVOINIZIOCAMPIONE,NUOVAFINECAMPIONE-511)
 NUOVAFINECAMPIONE=Max(NUOVAFINECAMPIONE,NUOVOINIZIOCAMPIONE+511)
 Inverse Off 
 Print At(0,8);"Inizio>Byte";NUOVOINIZIOCAMPIONE-Start(BANCO);
 Print " Fine>Byte";NUOVAFINECAMPIONE-Start(BANCO);
 LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
 LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
 Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte     "
End Proc
Procedure ARCOBALENO
 Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
 Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
 Set Rainbow 0,1,16,"","",""
 For LINEA=0 To 15 : Read DATO : Rain(0,LINEA)=DATO : Next LINEA
 If Ntsc Then LUNGHEZZAARCOBALENO=223 Else LUNGHEZZAARCOBALENO=271
 Rainbow 0,2,0,LUNGHEZZAARCOBALENO
End Proc
Procedure AZZERAFORMADONDA
 Shared LUNGHEZZASINTETICO
 For A=0 To LUNGHEZZASINTETICO-1
  F0RMADONDA(A)=0
 Next A
End Proc
Procedure CARICARAWOIFF
 INDIRIZZO=Start(BANCODIIO)+8
 If Peek$(INDIRIZZO,4)="8SVX"
  Add INDIRIZZO,12
  LUNGHEZZABANCO=Leek(INDIRIZZO)
  If LUNGHEZZABANCO=0
   Add INDIRIZZO,4
   LUNGHEZZABANCO=Leek(INDIRIZZO)
  Else 
   Add INDIRIZZO,4
  End If 
  Add INDIRIZZO,8
  FREQUENZA=Deek(INDIRIZZO)
  Add INDIRIZZO,8
  If Peek$(INDIRIZZO,4)="NAME"
   Add INDIRIZZO,4
   DATO=Leek(INDIRIZZO)
   Add INDIRIZZO,4+DATO
  End If 
  If Peek$(INDIRIZZO,4)="ANNO"
   Add INDIRIZZO,4
   DATO=Leek(INDIRIZZO)
   Add INDIRIZZO,4
   ANNOTAZIONI$=Peek$(INDIRIZZO,DATO)-Chr$(0)
   Add INDIRIZZO,DATO
  End If 
  If Peek$(INDIRIZZO,4)="BODY"
   Add INDIRIZZO,4
   LUNGHEZZADATI=Leek(INDIRIZZO)
   Add INDIRIZZO,4
   LUNGHEZZABANCO=Max(LUNGHEZZABANCO,LUNGHEZZADATI)
   Reserve As Chip Work BANCO,LUNGHEZZABANCO
   Copy INDIRIZZO,INDIRIZZO+LUNGHEZZABANCO-1 To Start(BANCO)
  Else 
   Proc TIC[FILE$+Str$(Length(BANCODIIO))+" Byte",ULTIMALINEA-1]
   Proc TIC["è un IFF anomalo, non posso caricarlo!",ULTIMALINEA]
   Wait 200
   NOMEFILE$=""
  End If 
 Else 
  LUNGHEZZABANCO=Length(BANCODIIO)
  Reserve As Chip Work BANCO,LUNGHEZZABANCO
  Copy Start(BANCODIIO),Start(BANCODIIO)+LUNGHEZZABANCO-1 To Start(BANCO)
  FREQUENZA=8363
  ANNOTAZIONI$=""
 End If 
 Erase BANCODIIO
End Proc
Procedure CARICAUNFILE
 FILE$=Fsel$("**","","Carica un campione audio","Premi Esc per uscire")
 If Exist(FILE$)
  Open In 1,FILE$
  LUNGHEZZABANCO=Max(Lof(1),512)
  Close 1
  MEMORIA=Chip Free+Fast Free
  If LUNGHEZZABANCO>MEMORIA
   Proc TIC["Non c'è memoria sufficiente per caricare il file",ULTIMALINEA-1]
   Proc TIC[FILE$,ULTIMALINEA] : Wait 200
   SENZAMEMORIA=True
  Else 
   Reserve As Work BANCODIIO,LUNGHEZZABANCO
   Bload FILE$,Start(BANCODIIO)
   SEPARATORE=Instr(FILE$,":") : POSIZIONE=1
   For A=1 To Len(FILE$)
    If Instr(FILE$,"/",POSIZIONE)>0
     SEPARATORECASSETTO=Instr(FILE$,"/",POSIZIONE)
     POSIZIONE=SEPARATORECASSETTO+1
    End If 
   Next A
   SEPARATORE=Max(SEPARATORE,SEPARATORECASSETTO)
   PERCORSO$=Left$(FILE$,SEPARATORE)
   If Right$(PERCORSO$,1)="/"
    PERCORSO$=Left$(PERCORSO$,Len(PERCORSO$)-1)
   End If 
   NOMEFILE$=Right$(FILE$,Len(FILE$)-SEPARATORE)
   SENZAMEMORIA=False
  End If 
 End If 
End Proc
Procedure CERCALOZERO[POSIZIONE,AVANTI]
 If AVANTI=True
  Repeat 
   Inc POSIZIONE
   DATO=Peek(POSIZIONE)
  Until DATO=0
 Else 
  Repeat 
   Dec POSIZIONE
   DATO=Peek(POSIZIONE)
  Until DATO=0
 End If 
End Proc[POSIZIONE]
Procedure CICLO
 If CICLO=True
  Sam Loop On : Inverse On 
  If GENERACAMPIONE=True
   Print At(12,8);"Ciclo" : Inverse Off 
  Else 
   Print At(6,ULTIMALINEA-3);"Ciclo" : Inverse Off 
  End If 
 Else 
  Sam Loop Off : Inverse Off 
  If GENERACAMPIONE=True
   Print At(12,8);"Ciclo"
  Else 
   Print At(6,ULTIMALINEA-3);"Ciclo"
  End If 
 End If 
End Proc
Procedure CONDIZIONEINIZIALE
 INIZIO=True
 NUOVOINIZIOCAMPIONE=Start(BANCO)
 NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
 LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
 LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
 NUOVAFREQUENZA=FREQUENZA
 Cls 
 Proc MOSTRACAMPIONE
 POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
 Proc INGRANDISCI
 Proc SETTALEZONE
 Proc CICLO
 Proc MESSAGGI
 Proc FILTRO
 Proc FREQUENZA
 ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
 Proc MOSTRALAZONAATTIVA
 Print At(0,ULTIMALINEA-4);"Sorgente>";ANNOTAZIONI$
End Proc
Procedure FERMACAMPIONEEDANNULLACICLOCAMPIONE
 Sam Stop : CICLO=False : Proc CICLO
End Proc
Procedure FILTRO
 If FILTRO=True
  Led On 
  If GENERACAMPIONE=True
   Inverse On : Print At(18,8);"Filtro" : Inverse Off 
  Else 
   Inverse On : Print At(12,ULTIMALINEA-3);"Filtro" : Inverse Off 
  End If 
 Else 
  Led Off 
  If GENERACAMPIONE=True
   Print At(18,8);"Filtro"
  Else 
   Print At(12,ULTIMALINEA-3);"Filtro"
  End If 
 End If 
End Proc
Procedure FREQUENZA
 If GENERACAMPIONE=True
  Print At(39,8);Str$(NUOVAFREQUENZA)-" ";
 Else 
  Print At(14,ULTIMALINEA-5);Str$(NUOVAFREQUENZA)-" ";
 End If 
 Print " Hertz "
End Proc
Procedure GENERACAMPIONE
 Shared ANNOTAZIONI$
 Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
 NOMEFILE$="Sintetico"
 GENERACAMPIONE=True
 Cls 
 Proc TIC["Indica la lunghezza in multipli di 512 Byte (01-16)",ULTIMALINEA]
 RISPOSTA$=Input$(2) : RISPOSTA=Val(RISPOSTA$)
 Proc LIMITI[RISPOSTA,1,16] : RISPOSTA=Param
 LUNGHEZZASINTETICO=512*RISPOSTA
 Reserve Zone 21
 Ink 2 : Draw 0,31 To 511,31 : Draw 0,103 To 511,103 : Ink 1
 Set Zone 1,0,0 To 511,63
 Print At(0,8);Zone$("Suona",2)
 Print At(6,8);Zone$("Ferma",3)
 Print At(12,8);Zone$("Ciclo",4)
 Print At(18,8);Zone$("Filtro",5)
 Set Zone 6,0,72 To 511,135
 Print At(0,18);Zone$("Suona",7)
 Print At(6,18);"Forme d'onda:"
 Print At(6,19);Zone$("Sinusoidale",8)
 Print At(6,20);Zone$("Triangolare",9)
 Print At(6,21);Zone$("Dente di sega",10)
 Print At(6,22);Zone$("Quadra",11)
 Print At(6,23);Zone$("Disegno",12)
 Print At(20,18);"Operazioni:"
 Print At(20,19);Zone$("Somma",13)
 Print At(20,20);Zone$("Sottrai",14)
 Print At(20,21);Zone$("Inverti",15)
 Print At(20,22);Zone$("Rovescia",16)
 Print At(76,17); Using "####";1
 Hslider 0,136 To 607,143,128,0,1
 Set Zone 17,0,136 To 607,143
 Print At(25,8);Zone$("Frequenza",18);
 Print Zone$(Chr$(147)+Chr$(148),19);
 Print Zone$(Chr$(149)+Chr$(150),20);
 Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
 Print At(20,23);Zone$("Progressione",21)
 Proc CICLO
 Proc FILTRO
 Reserve As Chip Work BANCO,LUNGHEZZASINTETICO
 Reserve As Chip Work BANCO4,LUNGHEZZASINTETICO
 FREQUENZAMASSIMA=LUNGHEZZASINTETICO/4
 LUNGHEZZA$=Str$(LUNGHEZZASINTETICO)+" Byte"
 Print At(80-Len(LUNGHEZZA$),8);LUNGHEZZA$
 Proc TIC["Premi Esc per uscire",ULTIMALINEA]
 Repeat 
  Repeat 
   TASTOPREMUTO$=Inkey$
   TASTODELTOPOPREMUTO=Mouse Key
   ZONATOPO=Mouse Zone
   If TASTODELTOPOPREMUTO=1
    If DENTROZONA=False
     If ZONATOPO=2
      Inverse On : Print At(0,8);"Suona"
      Sam Raw 1,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
      Sam Raw 2,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
     End If 
     If ZONATOPO=3
      Inverse On : Print At(6,8);"Ferma"
      Sam Stop 
     End If 
     If ZONATOPO=4
      CICLO= Not CICLO : Proc CICLO
     End If 
     If ZONATOPO=5
      FILTRO= Not FILTRO : Proc FILTRO
     End If 
     If ZONATOPO=7
      Inverse On : Print At(0,18);"Suona"
      Sam Raw 4,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
      Sam Raw 8,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
     End If 
     If ZONATOPO=8
      Inverse On : Print At(6,19);"Sinusoidale"
      Cls 0,0,72 To 639+1,135+1
      Ink 2 : Draw 0,103 To 511,103 : Ink 1
      UNITA#=2*Pi#/LUNGHEZZASINTETICO
      For X=0 To LUNGHEZZASINTETICO-1
       DATO=Sin(UNITA#*X)*127
       Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
       If DATO<0
        Add DATO,256
       End If 
       INDIRIZZO=Start(BANCO4)+X
       Poke INDIRIZZO,DATO
      Next X
      If MULTIPLO#>1
       Proc MULTIPLO
      End If 
     End If 
     If ZONATOPO=9
      Inverse On : Print At(6,20);"Triangolare"
      Cls 0,0,72 To 639+1,135+1
      Ink 2 : Draw 0,103 To 511,103 : Ink 1
      For X=0 To LUNGHEZZASINTETICO-1
       If X<LUNGHEZZASINTETICO/4
        DATO=(X*512)/LUNGHEZZASINTETICO
       End If 
       If X>LUNGHEZZASINTETICO/4-1 and X<LUNGHEZZASINTETICO/4*3
        DATO=((LUNGHEZZASINTETICO/2-X)*512)/LUNGHEZZASINTETICO-1
       End If 
       If X>LUNGHEZZASINTETICO/4*3-1
        DATO=((X-LUNGHEZZASINTETICO)*512)/LUNGHEZZASINTETICO
       End If 
       Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
       If DATO<0
        Add DATO,256
       End If 
       INDIRIZZO=Start(BANCO4)+X
       Poke INDIRIZZO,DATO
      Next X
      If MULTIPLO#>1
       Proc MULTIPLO
      End If 
     End If 
     If ZONATOPO=10
      Inverse On : Print At(6,21);"Dente di sega"
      Cls 0,0,72 To 639+1,135+1
      Ink 2 : Draw 0,103 To 511,103 : Ink 1
      For X=0 To LUNGHEZZASINTETICO-1
       DATO=((X/2-LUNGHEZZASINTETICO/4)*512)/LUNGHEZZASINTETICO
       Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
       If DATO<0
        Add DATO,256
       End If 
       INDIRIZZO=Start(BANCO4)+X
       Poke INDIRIZZO,DATO
      Next X
      If MULTIPLO#>1
       Proc MULTIPLO
      End If 
     End If 
     If ZONATOPO=11
      Inverse On : Print At(6,22);"Quadra"
      Cls 0,0,72 To 639+1,135+1
      Ink 2 : Draw 0,103 To 511,103 : Ink 1 : Gr Locate 0,103
      For X=0 To LUNGHEZZASINTETICO-1
       If X<LUNGHEZZASINTETICO/2
        DATO=127
       Else 
        DATO=-128
       End If 
       Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
       If DATO<0
        Add DATO,256
       End If 
       INDIRIZZO=Start(BANCO4)+X
       Poke INDIRIZZO,DATO
      Next X
      If MULTIPLO#>1
       Proc MULTIPLO
      End If 
     End If 
     If ZONATOPO=12
      Inverse On : Print At(6,23);"Disegno"
      Proc TIC["Premi il tasto destro del mouse per finire",ULTIMALINEA]
      Repeat 
       TASTODELTOPOPREMUTO=Mouse Key
       ZONATOPO=Mouse Zone
       If TASTODELTOPOPREMUTO=1 and ZONATOPO=6
        XTOPO=X Screen(X Mouse) : YTOPO=Y Screen(Y Mouse)
        Ink 0 : Box XTOPO,72 To XTOPO+1,135
        Ink 2 : Draw XTOPO,103 To XTOPO+1,103
        Ink 1 : Draw XTOPO,YTOPO To XTOPO+1,YTOPO
        DATO=(103-YTOPO)*4
        If DATO<0
         Add DATO,256
        End If 
        INDIRIZZO=Start(BANCO4)+XTOPO*LUNGHEZZASINTETICO/512
        For A=0 To LUNGHEZZASINTETICO/512
         Poke INDIRIZZO+A,DATO
        Next A
       End If 
      Until TASTODELTOPOPREMUTO=2
      Cls 0,0,72 To 639+1,135+1
      Ink 2 : Draw 0,103 To 511,103 : Ink 1
      Gr Locate 0,103
      For X=0 To LUNGHEZZASINTETICO-1 Step LUNGHEZZASINTETICO/512
       DATO=Peek(Start(BANCO4)+X)
       If DATO>127
        Add DATO,-256
       End If 
       Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
      Next X
      NUOVOMESSAGGIO=True
     End If 
     If ZONATOPO=13
      Inverse On : Print At(20,19);"Somma"
      Proc SOMMA
      Proc MOSTRASINTETICO
     End If 
     If ZONATOPO=14
      Inverse On : Print At(20,20);"Sottrai"
      For X=0 To LUNGHEZZASINTETICO-1
       DATO=Peek(Start(BANCO4)+X)
       If DATO>127
        Add DATO,-256
       End If 
       Add F0RMADONDA(X),-DATO
      Next X
      Proc MOSTRASINTETICO
     End If 
     If ZONATOPO=15
      Inverse On : Print At(20,21);"Inverti"
      Cls 0,0,72 To 639+1,135+1
      Ink 2 : Draw 0,103 To 511,103 : Ink 1
      Gr Locate 0,103
      For X=0 To LUNGHEZZASINTETICO-1
       DATO=Peek(Start(BANCO4)+X)
       If DATO>127
        Add DATO,-256
       End If 
       DATO= Not DATO
       Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
       If DATO<0
        Add DATO,256
       End If 
       INDIRIZZO=Start(BANCO4)+X
       Poke INDIRIZZO,DATO
      Next X
     End If 
     If ZONATOPO=16
      Inverse On : Print At(20,22);"Rovescia"
      Cls 0,0,72 To 639+1,135+1
      Ink 2 : Draw 0,103 To 511,103 : Ink 1
      Reserve As Work BANCO3,LUNGHEZZASINTETICO
      For X=0 To LUNGHEZZASINTETICO-1
       DATO=Peek(Start(BANCO4)+X)
       INDIRIZZO=Start(BANCO3)+LUNGHEZZASINTETICO-1-X
       Poke INDIRIZZO,DATO
       If DATO>127
        Add DATO,-256
       End If 
       Polyline To((LUNGHEZZASINTETICO-1-X)*512)/LUNGHEZZASINTETICO,103-DATO/4
      Next X
      Copy Start(BANCO3),Start(BANCO3)+Length(BANCO3)-1 To Start(BANCO4)
      Erase BANCO3
     End If 
     If ZONATOPO=18
      Inverse On : Print At(25,8);"Frequenza"
      Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
      NUOVAFREQUENZA=FREQUENZA
      Proc FREQUENZA
      NUOVOMESSAGGIO=True
     End If 
     If ZONATOPO=19
      Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
      Inc NUOVAFREQUENZA
      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
      Proc FREQUENZA
      NUOVOMESSAGGIO=True
     End If 
     If ZONATOPO=20
      Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
      Dec NUOVAFREQUENZA
      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
      Proc FREQUENZA
      NUOVOMESSAGGIO=True
     End If 
     If ZONATOPO=21
      Inverse On : Print At(20,23);"Progressione"
      Proc TIC["Progressione aritmetica o geometrica (a/g)?",ULTIMALINEA]
      RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
      If RISPOSTA$="a"
       PROGRESSIONE$="Aritmetica"
      End If 
      If RISPOSTA$="g"
       PROGRESSIONE$="Geometrica"
      End If 
      If PROGRESSIONE$="Aritmetica" or PROGRESSIONE$="Geometrica"
       Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255 : Ink 1
       Input "Inizio della progressione (1-"+Str$(FREQUENZAMASSIMA)-" "+")?";RISPOSTA$;
       Curs Off 
       If RISPOSTA$<>""
        PRIMOTERMINE=Val(RISPOSTA$)
        Proc LIMITI[PRIMOTERMINE,1,FREQUENZAMASSIMA] : PRIMOTERMINE=Param
        Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255 : Ink 1
        Input "Fine della progressione (1-"+Str$(FREQUENZAMASSIMA)-" "+")?";RISPOSTA$;
        Curs Off 
        If RISPOSTA$<>""
         ULTIMOTERMINE=Val(RISPOSTA$)
         Proc LIMITI[ULTIMOTERMINE,1,FREQUENZAMASSIMA] : ULTIMOTERMINE=Param
         Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255 : Ink 1
         Input "Numero di valori intermedi (1-126)?";RISPOSTA$;
         Curs Off 
         If RISPOSTA$<>""
          VLORIINTERMEDI=Val(RISPOSTA$) : VLORITOTALI=VLORIINTERMEDI+2
          Proc LIMITI[VLORITOTALI,3,128] : VLORITOTALI=Param
          If PROGRESSIONE$="Aritmetica"
           RAGIONE#=(ULTIMOTERMINE-PRIMOTERMINE)/(VLORITOTALI-1*1.0)
           For A=1 To VLORITOTALI
            If A=VLORITOTALI
             MULTIPLO#=ULTIMOTERMINE
            Else 
             MULTIPLO#=RAGIONE#*(A-1)+PRIMOTERMINE
            End If 
            Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
            Proc MULTIPLO
            Cls 0,0,72 To 639+1,135+1
            Ink 2 : Draw 0,103 To 511,103 : Ink 1
            Proc SOMMA
           Next A
           For A=0 To LUNGHEZZASINTETICO-1 Step 4
            Loke Start(BANCO4)+A,0
           Next A
           Proc MOSTRASINTETICO
          End If 
          If PROGRESSIONE$="Geometrica"
           RAGIONE#=(ULTIMOTERMINE/PRIMOTERMINE)^(1.0/(VLORITOTALI-1))
           For A=1 To VLORITOTALI
            If A=VLORITOTALI
             MULTIPLO#=ULTIMOTERMINE
            Else 
             MULTIPLO#=RAGIONE#^(A-1)*PRIMOTERMINE
            End If 
            Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
            Proc MULTIPLO
            Cls 0,0,72 To 639+1,135+1
            Ink 2 : Draw 0,103 To 511,103 : Ink 1
            Proc SOMMA
           Next A
           For A=0 To LUNGHEZZASINTETICO-1 Step 4
            Loke Start(BANCO4)+A,0
           Next A
           Proc MOSTRASINTETICO
          End If 
         End If 
        End If 
       End If 
      End If 
      PROGRESSIONE$=""
      NUOVOMESSAGGIO=True
     End If 
     DENTROZONA=True
    End If 
    If ZONATOPO=17
     MULTIPLO#=X Screen(X Mouse)/(607.0/FREQUENZAMASSIMA)
     Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#,1 : Wait Vbl 
     MULTIPLO#=MULTIPLO#+1 : Print At(76,17); Using "####";MULTIPLO#
    End If 
   Else If TASTODELTOPOPREMUTO=2
    If ZONATOPO=19
     Inverse On 
     Print At(34,8);Chr$(147)+Chr$(148)
     Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
     Inc NUOVAFREQUENZA
     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
     Proc FREQUENZA
     NUOVOMESSAGGIO=True
    End If 
    If ZONATOPO=20
     Inverse On 
     Print At(36,8);Chr$(149)+Chr$(150)
     Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
     Dec NUOVAFREQUENZA
     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
     Proc FREQUENZA
     NUOVOMESSAGGIO=True
    End If 
   Else 
    Inverse Off 
    Print At(0,8);"Suona"
    Print At(6,8);"Ferma"
    Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
    Print At(0,18);"Suona"
    Print At(6,19);"Sinusoidale"
    Print At(6,20);"Triangolare"
    Print At(6,21);"Dente di sega"
    Print At(6,22);"Quadra"
    Print At(6,23);"Disegno"
    Print At(20,19);"Somma"
    Print At(20,20);"Sottrai"
    Print At(20,21);"Inverti"
    Print At(20,22);"Rovescia"
    Print At(20,23);"Progressione"
    If NUOVOMESSAGGIO=True
     Proc TIC["Premi Esc per uscire",ULTIMALINEA]
     NUOVOMESSAGGIO=False
    End If 
    DENTROZONA=False
   End If 
  Until TASTOPREMUTO$<>""
 Until TASTOPREMUTO$=Chr$(27)
 Erase BANCO4
 Proc AZZERAFORMADONDA
 ANNOTAZIONI$="SamplesMaster by Stefano Regattin"
End Proc
Procedure INGRANDISCI
 Cls 0,0,72 To 639+1,72+ALTEZZA+1
 Ink 2 : Draw 0,72+ZERO To 639,72+ZERO : Ink 1
 Clip 0,72 To 639,72+ALTEZZA
 Gr Locate 0,72+ZERO
 For X=0 To 639
  POSIZIONE=POSIZIONEINGRANDIMENTO+X
  DATO=Peek(POSIZIONE)
  If DATO>127
   Add DATO,-256
  End If 
  If POSIZIONE>=Start(BANCO) and POSIZIONE<=Start(BANCO)+Length(BANCO)-1
   If POSIZIONE=Start(BANCO)+Length(BANCO)-1
    Polyline X,72+ZERO-DATO To X,72+ZERO
   Else 
    Polyline To X,72+ZERO-DATO : Y=Ygr
   End If 
  Else 
   Gr Locate X+1,72+ZERO
  End If 
  If POSIZIONE=NUOVOINIZIOCAMPIONE
   Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
   Gr Writing 1 : Gr Locate X,Y
  End If 
  If POSIZIONE=NUOVAFINECAMPIONE
   Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
   Draw X+3,72 To X+7,72
   Draw X+3,74 To X+7,74
   Draw X+3,72 To X+3,76
   Gr Writing 1 : Gr Locate X,Y
  End If 
 Next X
 Clip 
End Proc
Procedure INIZIO
 If INIZIO=True
  Inverse On : Print At(39,ULTIMALINEA-2);"Inizio" : Inverse Off 
  Print At(46,ULTIMALINEA-2);"Fine"
 Else 
  Print At(39,ULTIMALINEA-2);"Inizio"
  Inverse On : Print At(46,ULTIMALINEA-2);"Fine" : Inverse Off 
 End If 
End Proc
Procedure LIMITI[NUMERO,LIMITEMINIMO,LIMITEMASSIMO]
 '-> Limiti by Stefano Regattin 
 'i> 19 maggio 1996 
 'm> 12 giugno 1996 
 '--------------------------------------------------------
 'La procedura equivale alle seguenti linee di programma: 
 ' If NUMERO<LIMITEMINIMO Then NUMERO=LIMITEMINIMO
 ' If NUMERO>LIMITEMASSIMO Then NUMERO=LIMITEMASSIMO
 'Se LIMITEMINIMO è maggiore di LIMITEMASSIMO ne scambia i valori 
 '----------------------------------------------------------------  
 If LIMITEMINIMO>LIMITEMASSIMO Then Swap LIMITEMINIMO,LIMITEMASSIMO
 NUMERO=Max(Min(NUMERO,LIMITEMASSIMO),LIMITEMINIMO)
End Proc[NUMERO]
Procedure LINEE
 Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
 XLINEAINIZIOCAMPIONE=(NUOVOINIZIOCAMPIONE-INIZIOCAMPIONE)/PASSO
 Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
 Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
 XLINEAFINECAMPIONE=(NUOVAFINECAMPIONE-INIZIOCAMPIONE)/PASSO
 Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
End Proc
Procedure MARCAALVOLO
 Proc TIC["Premi la barra di spazio per marcare l'inizio",ULTIMALINEA]
 Proc SUONA
 Timer=0
 TEMP0RIZZAZIONE=NUOVAFREQUENZA/50
 XINIZIO=XLINEAINIZIOCAMPIONE
 Gr Writing 2
 Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
 Gr Writing 1
 Repeat 
  Gr Writing 2 : Draw XINIZIO,0 To XINIZIO,63 : Gr Writing 1
  TEMP0=Timer*TEMP0RIZZAZIONE
  X=XLINEAINIZIOCAMPIONE+TEMP0/PASSO
  TASTOPREMUTO$=Inkey$
  If TASTOPREMUTO$=" "
   NUOVOINIZIOCAMPIONE=Start(BANCO)+TEMP0
   XLINEAINIZIOCAMPIONE=X
   Gr Writing 2
   Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
   Gr Writing 1
   SPAZIOPREMUTO=1
   Exit 
  End If 
  Gr Writing 2 : Draw X,0 To X,63 : Gr Writing 1
  XINIZIO=X
 Until TEMP0>LUNGHEZZACAMPIONE
 If TEMP0<LUNGHEZZACAMPIONE
  Proc TIC["Premi la barra di spazio per marcare la fine",ULTIMALINEA]
  Gr Writing 2 : Draw X,0 To X,63 : Gr Writing 1
  XFINE=X
  Repeat 
   Gr Writing 2 : Draw XFINE,0 To XFINE,63 : Gr Writing 1
   TEMP0=Timer*TEMP0RIZZAZIONE
   X=TEMP0/PASSO
   TASTOPREMUTO$=Inkey$
   If TASTOPREMUTO$=" "
    NUOVAFINECAMPIONE=Start(BANCO)+TEMP0
    XLINEAFINECAMPIONE=X
    Gr Writing 2
    Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
    Gr Writing 1
    SPAZIOPREMUTO=2
    Exit 
   End If 
   Gr Writing 2 : Draw X,0 To X,63 : Gr Writing 1
   XFINE=X
  Until TEMP0>LUNGHEZZACAMPIONE
 End If 
 If SPAZIOPREMUTO=1
  Gr Writing 2 : Draw XFINE,0 To XFINE,63 : Gr Writing 1
 Else If SPAZIOPREMUTO=0
  Gr Writing 2
  Draw XINIZIO,0 To XINIZIO,63
  Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
  Gr Writing 1
 End If 
End Proc
Procedure MESSAGGI
 Proc TIC[NOMEFILE$+Str$(Length(BANCO))+" Byte",ULTIMALINEA-1]
 Proc TIC[Chr$(147)+Chr$(148)+" "+Chr$(149)+Chr$(150)+" zona attiva "+Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento Esc Esci",ULTIMALINEA]
End Proc
Procedure MISCELATIMBRI
 Shared ANNOTAZIONI$
 Proc FERMACAMPIONEEDANNULLACICLOCAMPIONE
 Cls 
 FILE$=Fsel$("**","","Carica il primo campione audio","Premi Esc per uscire")
 If FILE$="" Then Pop Proc
 If Exist(FILE$)
  Open In 1,FILE$
  LUNGHEZZABANCO=Max(Lof(1),512)
  Close 1
  MEMORIA=Chip Free+Fast Free
  If LUNGHEZZABANCO>MEMORIA
   Proc TIC["Non c'è memoria sufficiente per caricare il file",ULTIMALINEA-1]
   Proc TIC[FILE$,ULTIMALINEA] : Wait 200
   SENZAMEMORIA=True
  Else 
   Reserve As Work BANCODIIO,LUNGHEZZABANCO
   Bload FILE$,Start(BANCODIIO)
   SENZAMEMORIA=False
   Proc CARICARAWOIFF
   LUNGHEZZABANCO1=LUNGHEZZABANCO
   Reserve As Chip Work BANCO3,LUNGHEZZABANCO1
   Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCO3)
  End If 
 End If 
 FILE$=Fsel$("**","","Carica il secondo campione audio","Premi Esc per uscire")
 If FILE$="" Then Pop Proc
 If Exist(FILE$)
  Open In 1,FILE$
  LUNGHEZZABANCO=Max(Lof(1),512)
  Close 1
  MEMORIA=Chip Free+Fast Free
  If LUNGHEZZABANCO>MEMORIA
   Proc TIC["Non c'è memoria sufficiente per caricare il file",ULTIMALINEA-1]
   Proc TIC[FILE$,ULTIMALINEA] : Wait 200
   SENZAMEMORIA=True
  Else 
   Reserve As Work BANCODIIO,LUNGHEZZABANCO
   Bload FILE$,Start(BANCODIIO)
   SENZAMEMORIA=False
   Proc CARICARAWOIFF
   LUNGHEZZABANCO2=LUNGHEZZABANCO
   Reserve As Chip Work BANCO4,LUNGHEZZABANCO2
   Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCO4)
  End If 
 End If 
 LUNGHEZZABANCO=Max(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
 If LUNGHEZZABANCO1=0 or LUNGHEZZABANCO2=0
  Proc TIC["Devi scegliere due campioni audio!",ULTIMALINEA]
  Wait 200 : Pop Proc
 End If 
 If SENZAMEMORIA=True Then Pop Proc
 Reserve As Chip Work BANCO,LUNGHEZZABANCO
 GENERACAMPIONE=True
 Reserve Zone 8
 MOSTRACAMPIONEPERMISCELAZIONE[BANCO3,0]
 MOSTRACAMPIONEPERMISCELAZIONE[BANCO4,72]
 Print At(0,8);Zone$("Suona",1)
 Print At(6,8);Zone$("Ferma",2)
 Print At(12,8);Zone$("Ciclo",3)
 Print At(51,8);"Lunghezza>";Str$(Length(BANCO3))-" ";" Byte"
 Print At(18,8);Zone$("Filtro",4)
 Print At(0,17);Zone$("Suona",5)
 Print At(6,17);"Lunghezza>";Str$(Length(BANCO4))-" ";" Byte"
 Print At(25,8);Zone$("Frequenza",6);
 Print Zone$(Chr$(147)+Chr$(148),7);
 Print Zone$(Chr$(149)+Chr$(150),8);
 Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
 Proc CICLO
 Proc FILTRO
 Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
 Repeat 
  Repeat 
   TASTOPREMUTO$=Inkey$
   TASTODELTOPOPREMUTO=Mouse Key
   ZONATOPO=Mouse Zone
   If TASTODELTOPOPREMUTO=1
    If DENTROZONA=False
     If ZONATOPO=1
      Inverse On : Print At(0,8);"Suona"
      Sam Raw 1,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
      Sam Raw 2,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
     End If 
     If ZONATOPO=2
      Inverse On : Print At(6,8);"Ferma"
      Sam Stop 
     End If 
     If ZONATOPO=3
      CICLO= Not CICLO : Proc CICLO
     End If 
     If ZONATOPO=4
      FILTRO= Not FILTRO : Proc FILTRO
     End If 
     If ZONATOPO=5
      Inverse On : Print At(0,17);"Suona"
      Sam Raw 4,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
      Sam Raw 8,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
     End If 
     If ZONATOPO=6
      Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
      NUOVAFREQUENZA=FREQUENZA
      Proc FREQUENZA
      NUOVOMESSAGGIO=True
     End If 
     If ZONATOPO=7
      Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
      Inc NUOVAFREQUENZA
      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
      Proc FREQUENZA
      NUOVOMESSAGGIO=True
     End If 
     If ZONATOPO=8
      Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
      Dec NUOVAFREQUENZA
      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
      Proc FREQUENZA
      NUOVOMESSAGGIO=True
     End If 
     DENTROZONA=True
    End If 
   Else If TASTODELTOPOPREMUTO=2
    If ZONATOPO=7
     Inverse On 
     Print At(34,8);Chr$(147)+Chr$(148)
     Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
     Inc NUOVAFREQUENZA
     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
     Proc FREQUENZA
     NUOVOMESSAGGIO=True
    End If 
    If ZONATOPO=8
     Inverse On 
     Print At(36,8);Chr$(149)+Chr$(150)
     Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
     Dec NUOVAFREQUENZA
     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
     Proc FREQUENZA
     NUOVOMESSAGGIO=True
    End If 
   Else 
    Inverse Off 
    Print At(0,8);"Suona"
    Print At(6,8);"Ferma"
    Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
    Print At(0,17);"Suona"
    If NUOVOMESSAGGIO=True
     Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
     NUOVOMESSAGGIO=False
    End If 
    DENTROZONA=False
   End If 
  Until TASTOPREMUTO$<>""
  If TASTOPREMUTO$=Chr$(27) Then Pop Proc
 Until TASTOPREMUTO$=" "
 Proc TIC["Vuoi la dissolvenza da un campione all'altro (s/n)?",ULTIMALINEA]
 RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
 If RISPOSTA$<>"s" and RISPOSTA$<>"n" Then Pop Proc
 If RISPOSTA$="s"
  If LUNGHEZZABANCO1>LUNGHEZZABANCO2
   SCELTA=1
  Else If LUNGHEZZABANCO1=LUNGHEZZABANCO2
   Repeat 
    Proc TIC["I 2 campioni sono lunghi uguali; quale scegli come campione di partenza (1/2)?",ULTIMALINEA]
    SCELTA$=Input$(1) : SCELTA=Val(SCELTA$)
   Until SCELTA=1 or SCELTA=2
  Else 
   SCELTA=2
  End If 
  Proc TIC["Sto miscelando i due campioni...",ULTIMALINEA]
  LUNGHEZZAMISCELAZIONE=Max(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  For INDIRIZZO=0 To LUNGHEZZAMISCELAZIONE-1
   VLOREPERCENTUALE=(INDIRIZZO*100)/(LUNGHEZZAMISCELAZIONE-1)
   DATO1=Peek(Start(BANCO3)+INDIRIZZO)
   If DATO1>127
    Add DATO1,-256
   End If 
   DATO2=Peek(Start(BANCO4)+INDIRIZZO)
   If DATO2>127
    Add DATO2,-256
   End If 
   If SCELTA=1
    DATO1=(DATO1*VLOREPERCENTUALE)/100
    If INDIRIZZO<=LUNGHEZZABANCO2
     DATO2=(DATO2*(100-VLOREPERCENTUALE))/100
    Else 
     DATO2=0
    End If 
   Else 
    If INDIRIZZO<=LUNGHEZZABANCO1
     DATO1=(DATO1*(100-VLOREPERCENTUALE))/100
    Else 
     DATO1=0
    End If 
    DATO2=(DATO2*VLOREPERCENTUALE)/100
   End If 
   DATOMISCELAZIONE=(DATO1+DATO2)/2
   If DATOMISCELAZIONE<0
    Add DATOMISCELAZIONE,256
   End If 
   Poke Start(BANCO)+INDIRIZZO,DATOMISCELAZIONE
   XBARRAPROGRESSO=(80*INDIRIZZO)/(LUNGHEZZAMISCELAZIONE-1)
   Inverse On : Print At(XBARRAPROGRESSO,ULTIMALINEA-1);" "; : Inverse Off 
  Next INDIRIZZO
 End If 
 If RISPOSTA$="n"
  Proc TIC["Sto miscelando i due campioni...",ULTIMALINEA]
  LUNGHEZZAMISCELAZIONE=Min(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  For INDIRIZZO=0 To LUNGHEZZAMISCELAZIONE-1
   DATO1=Peek(Start(BANCO3)+INDIRIZZO)
   DATO2=Peek(Start(BANCO4)+INDIRIZZO)
   If DATO1>127
    Add DATO1,-256
   End If 
   If DATO2>127
    Add DATO2,-256
   End If 
   DATOMISCELAZIONE=(DATO1+DATO2)/2
   If DATOMISCELAZIONE<0
    Add DATOMISCELAZIONE,256
   End If 
   Poke Start(BANCO)+INDIRIZZO,DATOMISCELAZIONE
   XBARRAPROGRESSO=(80*INDIRIZZO)/(LUNGHEZZAMISCELAZIONE-1)
   Inverse On : Print At(XBARRAPROGRESSO,ULTIMALINEA-1);" "; : Inverse Off 
  Next INDIRIZZO
 End If 
 ANNOTAZIONI$="SamplesMaster by Stefano Regattin"
End Proc
Procedure MOSTRACAMPIONE
 INIZIOCAMPIONE=NUOVOINIZIOCAMPIONE : FINECAMPIONE=NUOVAFINECAMPIONE
 PASSO=(FINECAMPIONE-INIZIOCAMPIONE+1)/640+1 : PASSO=Max(PASSO,1)
 Cls 0,0,0 To 639+1,63+1 : Ink 2 : Draw 0,31 To 639,31 : Gr Locate 0,31 : Ink 1
 For INDIRIZZO=INIZIOCAMPIONE To FINECAMPIONE Step PASSO
  DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
  Polyline To X,31-DATO/4 : Inc X
 Next INDIRIZZO
 XLINEAINIZIOCAMPIONE=0 : XLINEAFINECAMPIONE=X-1
 Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
 Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
 Inverse Off : Print At(0,8);"Inizio>Byte";INIZIOCAMPIONE-Start(BANCO);
 Print " Fine>Byte";FINECAMPIONE-Start(BANCO);
 Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte     "
 DIVISIONESLIDERINGRANDIMENTO#=640.0/PASSO
End Proc
Procedure MOSTRACAMPIONEPERMISCELAZIONE[B,P]
 IC=Start(B) : FC=Start(B)+Length(B)-1
 PASSO=(FC-IC+1)/640+1 : PASSO=Max(PASSO,1)
 Ink 2 : Draw 0,P+31 To 639,P+31 : Gr Locate 0,P+31 : Ink 1
 For INDIRIZZO=IC To FC Step PASSO
  DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
  Polyline To X,P+31-DATO/4 : Inc X
 Next INDIRIZZO
End Proc
Procedure MOSTRASINTETICO
 Shared LUNGHEZZASINTETICO
 Cls 0,0,0 To 511+1,63+1
 Ink 2 : Draw 0,31 To 511,31 : Ink 1
 Gr Locate 0,31 : DIVISORE=1
 For X=0 To LUNGHEZZASINTETICO-1
  DATO=F0RMADONDA(X)/DIVISORE
  If DATO>127 or DATO<-128
   Cls 0,0,0 To 511+1,63+1
   Ink 2 : Draw 0,31 To 511,31 : Ink 1
   Gr Locate 0,31 : Inc DIVISORE : X=-1
  End If 
  If X>-1
   Polyline To(X*512)/LUNGHEZZASINTETICO,31-DATO/4
   If DATO<0
    Add DATO,256
   End If 
   Poke Start(BANCO)+X,DATO
  End If 
 Next X
End Proc
Procedure MOSTRALAZONAATTIVA
 Print At(65,8);ZONAATTIVA$
End Proc
Procedure MULTIPLO
 Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
 Reserve As Work BANCO3,LUNGHEZZASINTETICO
 Repeat 
  For X=0 To LUNGHEZZASINTETICO-1 Step MULTIPLO#
   DATO=Peek(Start(BANCO4)+X)
   INDIRIZZO=Start(BANCO3)+M
   Poke INDIRIZZO,DATO : Inc M : Exit If M=LUNGHEZZASINTETICO
  Next X
 Until M=LUNGHEZZASINTETICO
 Gr Locate 0,103
 For X=0 To LUNGHEZZASINTETICO-1
  DATO=Peek(Start(BANCO3)+X)
  INDIRIZZO=Start(BANCO4)+X
  Poke INDIRIZZO,DATO
  If DATO>127
   Add DATO,-256
  End If 
  Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
 Next X
 Erase BANCO3
 Inverse Off 
 Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#,1
 Print At(76,17); Using "####";MULTIPLO#
End Proc
Procedure SALVAUNFILE
 FILE$=Fsel$("**",NOMEFILE$,"Salva un campione audio","Premi Esc per uscire")
 If FILE$<>""
  Proc TIC["Vuoi salvarlo come file IFF (s/n) ?",ULTIMALINEA]
  RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  If RISPOSTA$="s"
   Proc TIC["Sto salvando il campione audio IFF",ULTIMALINEA-1]
   Proc TIC[FILE$,ULTIMALINEA]
   LUNGHEZZANOME=Len(NOMEFILE$)/4*4
   RESTONOME=Len(NOMEFILE$) mod 4
   If RESTONOME>0
    Add LUNGHEZZANOME,4
   End If 
   LUNGHEZZAANNO=40
   LUNGHEZZABANCO=40+8+LUNGHEZZAANNO+8+LUNGHEZZACAMPIONE
   If NOMEFILE$<>""
    Add LUNGHEZZABANCO,8+LUNGHEZZANOME
   End If 
   LUNGHEZZABANCOPARI=LUNGHEZZABANCO mod 2
   If LUNGHEZZABANCOPARI=1
    Inc LUNGHEZZABANCO
   End If 
   Reserve As Work BANCODIIO,LUNGHEZZABANCO
   INDIRIZZO=Start(BANCODIIO)
   Poke$ INDIRIZZO,"FORM"
   Add INDIRIZZO,4
   Loke INDIRIZZO,LUNGHEZZABANCO-8
   Add INDIRIZZO,4
   Poke$ INDIRIZZO,"8SVXVHDR"
   Add INDIRIZZO,8
   Loke INDIRIZZO,20
   Add INDIRIZZO,4
   Loke INDIRIZZO,0
   Add INDIRIZZO,4
   Loke INDIRIZZO,LUNGHEZZACAMPIONE
   Add INDIRIZZO,4
   Loke INDIRIZZO,0
   Add INDIRIZZO,4
   Doke INDIRIZZO,NUOVAFREQUENZA
   Add INDIRIZZO,2
   Doke INDIRIZZO,256
   Add INDIRIZZO,2
   Doke INDIRIZZO,256
   Add INDIRIZZO,2
   Doke INDIRIZZO,0
   Add INDIRIZZO,2
   If NOMEFILE$<>""
    Poke$ INDIRIZZO,"NAME"
    Add INDIRIZZO,4
    Loke INDIRIZZO,LUNGHEZZANOME
    Add INDIRIZZO,4
    Poke$ INDIRIZZO,NOMEFILE$
    Add INDIRIZZO,Len(NOMEFILE$)
    If RESTONOME>0
     ZERINELNOME=4-RESTONOME
     Inverse On 
     For A=1 To ZERINELNOME
      Poke INDIRIZZO,0
      Inc INDIRIZZO
     Next A
    End If 
   End If 
   Poke$ INDIRIZZO,"ANNO"
   Add INDIRIZZO,4
   Loke INDIRIZZO,LUNGHEZZAANNO
   Add INDIRIZZO,4
   Poke$ INDIRIZZO,"SamplesMaster by Stefano Maria Regattin"+Chr$(0)
   Add INDIRIZZO,LUNGHEZZAANNO
   Poke$ INDIRIZZO,"BODY"
   Add INDIRIZZO,4
   Loke INDIRIZZO,LUNGHEZZACAMPIONE
   Add INDIRIZZO,4
   Copy INIZIOCAMPIONE,FINECAMPIONE To INDIRIZZO
   Add INDIRIZZO,LUNGHEZZACAMPIONE+LUNGHEZZABANCOPARI
   If INDIRIZZO=Start(BANCODIIO)+Length(BANCODIIO)
    Proc TIC["Conversione campione audio da RAW ad IFF avvenuta",ULTIMALINEA]
   Else 
    Proc TIC["Conversione campione audio da RAW ad IFF fallita!",ULTIMALINEA]
    Erase BANCODIIO
    Wait 200
    Pop Proc
   End If 
   Bsave FILE$,Start(BANCODIIO) To Start(BANCODIIO)+Length(BANCODIIO)
   Erase BANCODIIO
  Else 
   Proc TIC["Sto salvando il campione audio RAW",ULTIMALINEA-1]
   Proc TIC[FILE$,ULTIMALINEA]
   Bsave FILE$,INIZIOCAMPIONE To FINECAMPIONE+1
  End If 
  Wait 200
 End If 
End Proc
Procedure SETTALEZONE
 Reserve Zone 22
 Print At(0,ULTIMALINEA-3);Zone$("Suona",1)
 Print At(0,ULTIMALINEA-2);Zone$("Ferma",2)
 Print At(6,ULTIMALINEA-3);Zone$("Ciclo",3)
 Print At(12,ULTIMALINEA-3);Zone$("Filtro",4)
 Print At(21,ULTIMALINEA-3);"Mostra campione"
 Print At(19,ULTIMALINEA-2);Zone$("Tutto",5)
 Print At(26,ULTIMALINEA-2);Zone$("Tra le linee",6)
 Print At(40,ULTIMALINEA-3);"Posizione"
 Inverse On : Print At(39,ULTIMALINEA-2);Zone$("Inizio",7) : Inverse Off 
 Print At(46,ULTIMALINEA-2);Zone$("Fine",8)
 Print At(53,ULTIMALINEA-3);"Cerca lo zero"
 Print At(51,ULTIMALINEA-2);Zone$("<Indietro",9)
 Print At(61,ULTIMALINEA-2);Zone$("Avanti>",10)
 Print At(69,ULTIMALINEA-3);Zone$("Carica",11)
 Set Zone 12,0,72 To 639,72+ALTEZZA
 Set Zone 13,0,0 To 639,63
 Print At(6,ULTIMALINEA-2);Zone$("Genera",14)
 Print At(69,ULTIMALINEA-2);Zone$("Salva",15)
 Print At(76,ULTIMALINEA-2);Zone$("Esci",16)
 Set Zone 17,0,72+ALTEZZA+1 To 639,72+ALTEZZA+1+7
 YSLIDERINGRANDIMENTO=72+ALTEZZA+1
 Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,0,1
 Print At(0,ULTIMALINEA-5);Zone$("Frequenza",18);
 Print Zone$(Chr$(147)+Chr$(148),19);
 Print Zone$(Chr$(149)+Chr$(150),20);
 Print ">"
 Print At(26,ULTIMALINEA-5);Zone$("MixTimbri",21)
 Print At(36,ULTIMALINEA-5);Zone$("MarcaAlVolo",22)
End Proc
Procedure SETTASCHERMO
 If Ntsc Then LUNGHEZZASCHERMO=200 Else LUNGHEZZASCHERMO=256
 If Ntsc Then RIDUZIONE=4 Else RIDUZIONE=2
 ALTEZZA=256/RIDUZIONE-1 : ZERO=128/RIDUZIONE-1
 ULTIMALINEA=LUNGHEZZASCHERMO/8-1
 Screen Open 0,640,LUNGHEZZASCHERMO,4,Hires : Curs Off : Flash Off 
 Palette $60,$CCC,$C00,$C0 : Pen 1 : Paper 0 : Cls : Curs Pen 1
 Wait Vbl : Limit Mouse 
End Proc
Procedure SLIDERINGRANDIMENTO
 Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,POSIZIONESLIDER,1
End Proc
Procedure SOMMA
 Shared LUNGHEZZASINTETICO
 For X=0 To LUNGHEZZASINTETICO-1
  DATO=Peek(Start(BANCO4)+X)
  If DATO>127
   Add DATO,-256
  End If 
  Add F0RMADONDA(X),DATO
 Next X
End Proc
Procedure SUONA
 Sam Raw 1,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
 Sam Raw 2,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
End Proc
Procedure TIC[TESTO$,LINEA]
 '-> Testo Invertito e Centrato by Stefano Regattin 
 'i> 23 maggio 1996 
 'm> 25 maggio 1996 
 '--------------------------------------------------------------------------- 
 'LINEA contiene il numero di linea dove si posizionerà il testo; se vale -1
 ' (True) il testo sarà posizionato alla linea dove si trova il cursore; in 
 ' questo caso sarà necessario un comando PRINT per spostare il cursore 
 '----------------------------------------------------------------------
 If LINEA=True Then L=Y Curs Else L=LINEA
 Locate 0,L : Inverse On : Cline : Centre TESTO$ : Inverse Off 
End Proc
